/** * @file bfi_email_signup.js */ (function ($) { // If popup is enabled for mouse or touch events. if (Drupal.settings.bfi_email_signup.bfi_email_signup_enable_mouse_events || Drupal.settings.bfi_email_signup.bfi_email_signup_enable_touch_events) { var popupPositions = []; var mouseEvents = []; // Set the popup position and randomize if required. if (Drupal.settings.bfi_email_signup.bfi_email_signup_randomize_top) popupPositions.push('top'); if (Drupal.settings.bfi_email_signup.bfi_email_signup_randomize_center) popupPositions.push('center'); if (Drupal.settings.bfi_email_signup.bfi_email_signup_randomize_bottom) popupPositions.push('bottom'); Drupal.settings.bfi_email_signup.bfi_email_signup_position = popupPositions[bfiEmailSignupRandomNumber(0, popupPositions.length - 1)]; // Set the trigger and randomize if required. if (Drupal.settings.bfi_email_signup.bfi_email_signup_trigger_mouse_move) mouseEvents.push('mousemove'); if (Drupal.settings.bfi_email_signup.bfi_email_signup_trigger_mouse_leave) mouseEvents.push('mouseleave'); Drupal.settings.bfi_email_signup.bfi_email_signup_trigger = mouseEvents[bfiEmailSignupRandomNumber(0, mouseEvents.length - 1)]; $(document).ready(function() { if (!bfiEmailSignupCookie()) { // Show the block if no cookies were found. $('.block .content .bfi-email-signup-block').show(); // Fix the lazy loading issue with images embeded in the popup. bfiEmailSignupFixLazyImageLoading(); } // Show the signup popup for desktop on mouse events if enabled. if (Drupal.settings.bfi_email_signup.bfi_email_signup_enable_mouse_events) { $(document).one(Drupal.settings.bfi_email_signup.bfi_email_signup_trigger, function(e) { if (!bfiEmailSignupCookie() && e.pageX != 0 && e.pageY != 0) { // pageX/Y to stop trigger on mouse events for touch devices. // If mouse event is mouse leave then set the delay to zero. if (Drupal.settings.bfi_email_signup.bfi_email_signup_trigger == 'mouseleave') Drupal.settings.bfi_email_signup.bfi_email_signup_delay = '0'; // Tracking bfiEmailSignupEventTracking('Display'); bfiEmailSignupShowPopup(); } }); } // Show the signup popup for touch events if enabled. if (Drupal.settings.bfi_email_signup.bfi_email_signup_enable_touch_events) { $(document).one('touchmove', function(e) { if (!bfiEmailSignupCookie()) { // Set trigger for tracking. Drupal.settings.bfi_email_signup.bfi_email_signup_trigger = 'touchmove'; // Tracking. bfiEmailSignupEventTracking('Display'); bfiEmailSignupShowPopup(); } }); } // Decline signup. $(document).on('click', '#bfi-email-signup-overlay #bfi-email-signup-form-container .bfi-email-signup-decline', function(e) { e.preventDefault(); $('#bfi-email-signup-overlay').fadeOut(); // Tracking. bfiEmailSignupEventTracking('Declined'); bfiEmailSignupSetCookie('declined'); return false; }); // Signup from popup. $(document).on('click', '#bfi-email-signup-overlay #bfi-email-signup-form-container .bfi-email-signup-submit', function(e) { if (!bfiEmailSignupValidateEmail($.trim($('#bfi-email-signup-overlay form .bfi-email-signup-email').val()))) { e.preventDefault(); $('#bfi-email-signup-overlay #bfi-email-signup-form-container .bfi-email-signup-validation').show(); $('#bfi-email-signup-overlay #bfi-email-signup-form-container .bfi-email-signup-email').addClass('error'); return false; } else { // Tracking. bfiEmailSignupEventTracking('Accepted'); bfiEmailSignupSetCookie('accepted'); } }); // Signup from block. $(document).on('click', '.block #bfi-email-signup-form-container .bfi-email-signup-submit', function(e) { if (!bfiEmailSignupValidateEmail($.trim($('.block #bfi-email-signup-container form .bfi-email-signup-email').val()))) { e.preventDefault(); $('.block #bfi-email-signup-form-container .bfi-email-signup-validation').show(); $('.block #bfi-email-signup-form-container .bfi-email-signup-email').addClass('error'); return false; } else { bfiEmailSignupSetCookie('accepted'); } }); var defaultSignupTextfieldValue = Drupal.settings.bfi_email_signup.bfi_email_signup_textfield_value; $('.bfi-email-signup-email').attr('value', defaultSignupTextfieldValue); $(document).on('focus', '.bfi-email-signup-email', function(e) { if (this.value == defaultSignupTextfieldValue) { this.value = ''; $(this).removeClass('with-placeholder'); } }); $(document).on('blur', '.bfi-email-signup-email', function(e) { if (this.value == '') { this.value = defaultSignupTextfieldValue; $(this).addClass('with-placeholder'); } }); }); } // Check if we should take in to consideration the user cookie. function bfiEmailSignupCookie() { var declinedCookie = document.cookie.indexOf('bfi-email-signup-cookie-declined'); var acceptedCookie = document.cookie.indexOf('bfi-email-signup-cookie-accepted'); if (acceptedCookie < 0 && declinedCookie < 0) { return false; } else { return true; } } // Set the cookie if declined. function bfiEmailSignupSetCookie(cookieType) { var date = new Date(); var domain = ''; switch (cookieType) { case 'declined': date.setDate(date.getDate() + Drupal.settings.bfi_email_signup.bfi_email_signup_cookie_length); break; case 'accepted': date.setDate(date.getDate() + 150); break; } if (Drupal.settings.bfi_email_signup.bfi_email_signup_domain) { domain = ';domain=' + Drupal.settings.bfi_email_signup.bfi_email_signup_domain; document.domain = Drupal.settings.bfi_email_signup.bfi_email_signup_domain; } document.cookie = "bfi-email-signup-cookie-" + cookieType + "=1;expires=" + date.toUTCString() + domain + ";path=" + Drupal.settings.basePath; } // Email validation. function bfiEmailSignupValidateEmail(email) { var e = /\S+@\S+\.\S+/; return e.test(email); } // Slide in the dialog from the top. function bfiEmailSignupDialogTop(delay, popupColour, popupTextColour) { $('#bfi-email-signup-overlay #bfi-email-signup-container').addClass('edge'); $('#bfi-email-signup-overlay').addClass('show-edge').css({'top' : -1 * $('#bfi-email-signup-overlay').outerHeight(true), 'background-color' : popupColour, 'color': popupTextColour}).delay(delay).show().animate({'top': 0}, 600); } // Fade in the dialog into the center. function bfiEmailSignupDialogCenter(delay, popupColour, popupTextColour) { $('#bfi-email-signup-overlay #bfi-email-signup-container').addClass('center').css({'background-color' : popupColour, 'color': popupTextColour}); $('#bfi-email-signup-overlay').addClass('show-overlay').delay(delay).fadeIn(); } // Slide in the dialog from the bottom. function bfiEmailSignupDialogBottom(delay, popupColour, popupTextColour) { $('#bfi-email-signup-overlay #bfi-email-signup-container').addClass('edge'); $('#bfi-email-signup-overlay').addClass('show-edge').css({'bottom' : -1 * $('#bfi-email-signup-overlay').outerHeight(true), 'background-color' : popupColour, 'color': popupTextColour}).delay(delay).show().animate({'bottom': 0}, 600); } // Show the popup according to the position. function bfiEmailSignupShowPopup() { var delay = parseInt(Drupal.settings.bfi_email_signup.bfi_email_signup_delay)*1000; var popupColour = Drupal.settings.bfi_email_signup.bfi_email_popup_colour; var popupTextColour = Drupal.settings.bfi_email_signup.bfi_email_popup_text_colour; switch (Drupal.settings.bfi_email_signup.bfi_email_signup_position) { case 'top': bfiEmailSignupDialogTop(delay, popupColour, popupTextColour); break; case 'center': bfiEmailSignupDialogCenter(delay, popupColour, popupTextColour); break; case 'bottom': bfiEmailSignupDialogBottom(delay, popupColour, popupTextColour); break; } } // Generate a random number between the min and max values. function bfiEmailSignupRandomNumber(min, max) { return Math.floor(Math.random()*(max-min+1)+min); } // Execute some tracking code. function bfiEmailSignupEventTracking(action) { _gaq.push(['_trackEvent', 'BFI Email signups', action, Drupal.settings.bfi_email_signup.bfi_email_signup_position + ' - ' + Drupal.settings.bfi_email_signup.bfi_email_signup_trigger, , true]); } // Corporate site image lazy loading isn't playing nicely with the pop when using embed token to embed an image. function bfiEmailSignupFixLazyImageLoading() { $('#bfi-email-signup-text-container .lazy-hidden').each(function() { $(this).removeAttr('style').attr('src', $(this).data('src')).removeClass('lazy-hidden').addClass('lazy-loaded'); }); } })(jQuery);;